<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2020/12/7
 * Time: 19:07
 */
namespace app\send\controller;

use app\admin\controller\AdminBase;
use app\common\config\send_config;
use app\common\helper\appmsg_helper;
use app\common\model\SendQueue;
use app\common\model\SendTask;
use app\common\widget\send\send_new_widget;
use app\common\widget\send\send_sync_widget;
use app\common\widget\send\send_task_widget;
use app\common\widget\weixin\mass_widget;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;

class Admin extends AdminBase
{
    public function index()
    {
//        if ($this->store_id >= 1) {
//            return _return('成员无权使用群发功能');
//        }

        return View::fetch('multi_send');
    }

    /**
     * 保存群发（实际：消息入群发队列表中）
     * @return string
     */
    public function save()
    {
//        if ($this->store_id >= 1) {
//            return '店铺成员无权使用群发功能';
//        }

        // 筛选条件
        $target_type = Request::param('target_type', 0);

        // 筛选的具体信息
        $all_store = Request::param('all_store', 1);
        $area_id = trim(Request::param('area_id'), ',');
        $store_id = trim(Request::param('store_id'), ',');
        $type = Request::param('type', 0);
        $content = Request::post('content');

        if (!$store_id) {
            $store_id = $this->open_card_id;
        }
        $area_ids = array_unique(explode(',', $area_id));
        $store_ids = array_unique(explode(',', $store_id));

        //dump($area_id, $area_ids);
//        if ($target_type == 1) {
//            if (!$store_ids) {
//                return '请选择要发送的目标';
//            }
//        } else {
//            if (!$area_ids) {
//                return '请选择要发送的目标';
//            }
//
//            // 通过分区id取出相关店铺id
//            $store_ids = store_helper::get_store_ids(array('area_id'=>$area_ids));
//
//            // 如果选择了非分区店铺，要把store_id=0带上，即发给非店铺人员
//            if (in_array(0, $area_ids)) {
//                array_unshift($store_ids, 0);
//            }
//        }

        if (!$type) {
            return ['info' => '请选择要发送的消息类型'];
        }

        $send_msg_type_arr = send_config::$send_msg_type;
        if (!array_key_exists($type, $send_msg_type_arr)) {
            return ['info' => '群发类型不支持'];
        }

        if (!$content) {
            return ['info' => '请提供要发送的消息内容'];
        }

        $task_progress = 1;
        // 如果是图文
        if (in_array($type, array(40, 50))) {
            $appmsg_list = appmsg_helper::get_appmsg_list((int)$content);
            if (!$appmsg_list) {
                return ['info' => '该图文信息不存在'];
            }
            if (!$appmsg_list[0]['media_id']) {
                //return '该图文尚未同步到公众平台，请先同步';
            }

            foreach ($appmsg_list as $k => $v) {
                if ($v['content_type'] == 1) {
                    return ['info' => '该图文是纯外链图文，没有图文内容，不能用于推送'];

                } else {
                    $flag = has_out_link($v['content']);
                    if ($flag) {
                        return ['info' => '图文（' . $v['title'] . '）中存在外链，不能用于推送'];
                    }
                }
            }

            //dump($appmsg_list);

            // 如果纯文本
        } else if ($type == 1) {

            return ['info' => '请发送图文信息'];

            $content = customer_content_filter($content);
            if (!$content) {
                return ['info' => '文本内容不能为空'];
            }

            // 如果是文本，这条task直接就是10，不需额外生成
            $task_progress = 10;
        }

        //return '111';

        $send_target = array();
        // $store_ids 中有一个值为0，是指非店铺的成员
        $send_target['all_store'] = $all_store;
        $send_target['area_id'] = $area_ids;
        $send_target['store_id'] = $store_ids;

        // 如果是发图文，需先生成任务队列
        $new_info = array(
            'user_id' => $this->user_id,
            'type' => $type,
            'content' => $content,
            'send_target' => json_encode($send_target),
            'progress' => $task_progress
        );
        //dump($new_info);exit;

        $new_task = SendTask::create($new_info);
        $new_task_id = $new_task->id;


        // ==================================
        // 如果普通文本，直接生成与任务关联的队列send_queue
        // ==================================
        if ($type == 1) {
            // 文本如果发给全部店铺，只需一条即可
            if ($all_store == 1) {
                $new_queue_info = array(
                    'user_id' => $this->user_id,
                    'send_task_id' => $new_task_id,
                    'to_store_id' => -1,
                    'type' => $type,
                    'content' => $content,
                    'progress' => 1
                );

                SendQueue::create($new_queue_info);

            } else {
                // 如果是单独选了多个店铺，则还是要创建多条send_queue，单独发送
                foreach ($store_ids as $k => $v) {
                    $new_queue_info = array(
                        'user_id' => $this->user_id,
                        'send_task_id' => $new_task_id,
                        'to_store_id' => $v,
                        'type' => $type,
                        'content' => $content,
                        'progress' => 1
                    );
                    SendQueue::create($new_queue_info);
                }
            }
        }

        return ['info' => 'ok'];
    }

    public function merge_store_id($store_ids)
    {
        // 有图文的店铺
        $has_appmsg_store_ids = array();
        // 全国（非店铺）和 无图文的店铺
        $no_appmsg_store_ids = array();

        // 组装store
        foreach ($store_ids as $k => $v) {
            if ($v == 0) {
                array_push($no_appmsg_store_ids, $v);
            }

            $store_appmsg_filter = array(
                'merge_id' => 0,
                'store_id' => $v,
                'type' => 1,   // 只取店铺的单图文
                'verify' => 1,
                'send' => 2,
                'status' => 1
            );
            $store_appmsg_num = appmsg_helper::get_appmsg_num($store_appmsg_filter);
            if ($store_appmsg_num >= 1) {
                array_push($has_appmsg_store_ids, $v);

            } else {
                array_push($no_appmsg_store_ids, $v);
            }
        }

        array_push($has_appmsg_store_ids, $no_appmsg_store_ids);
    }


    /**
     * 测试群发任务生成新图文appmsg_send 和 队列send_queue
     */
    public function test_send_task()
    {
        (new send_task_widget())->do_send_task();
    }

    /**
     * 测试同步要群发的图文去微信公众号
     */
    public function test_send_sync()
    {
        (new send_sync_widget())->sync_appmsg();
    }

    /**
     * 测试真正的群发推发信息
     */
    public function test_send()
    {
        (new send_new_widget())->do_send_queue();
    }

    /**
     * 验证群发
     */
    public function test_send_check()
    {
        $wx_msg_id = Request::param('msg_id');
        if (!$wx_msg_id) {
            echo 'no msg_id';
            exit;
        }
        $res = (new mass_widget())->mass_send_check($wx_msg_id);

        dump($res);
    }

}